package com.smarthome.core.user;

import java.util.List;

import com.smarthome.domain.bean.ShUser;
import com.smarthome.domain.bean.ShUserResource;
import com.smarthome.domain.enums.ShUserResourceTypeFlagEnum;
import com.smarthome.domain.vo.boss.Tree;

public interface UserResourceService {

    /**
     * 查询所有开放的权限
     * @return
     * @createTime 2015年8月26日 下午4:40:51
     * @author KongXiangyu
     */
    List<ShUserResource> queryAllOpenedUserResources();

    /**
     * 根据id查询系统资源
     * @param id
     * @return
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    ShUserResource queryUserResourceById(Long id);

    /**
     * 根据用户Id查询权限
     * @param userId
     * @return
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    List<ShUserResource> queryUserResourcesByUserId(Long userId);

    /**
     * 根据用户Id和角色查询权限
     * @param userId
     * @param residenceId
     * @return
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    List<ShUserResource> queryUserResourcesByUserAndRole(Long userId, Long residenceId);

    /**
     * 获取用户树状资源
     * @param shUser
     * @param type
     * @return
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    List<Tree> tree(ShUser shUser, ShUserResourceTypeFlagEnum type);

    /**
     * 获取用户树状资源
     * @param shUser
     * @return
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    List<ShUserResource> treeGrid(ShUser shUser);

    /**
     * 编辑资源
     * @param resource
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    void edit(ShUserResource resource);

    /**
     * 添加资源
     * @param resource
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    void add(ShUserResource resource);

    /**
     * 删除资源
     * @param id
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    void delete(Long id);
    
}
